home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 147
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin
/
docs
/
ippon
/
data
/
etc
/
hahen.lzh
/
fxsp2lib.c
< prev
next >
Wrap
C/C++ Source or Header
|
1999-05-27
|
3KB
|
138 lines
/* fxsp2lib.c */
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "fxsp2lib.h"
#define SPRITE_MAX 256
#define FRAME_MAX 256
typedef struct {
signed short vx; /* 相対座標データ */
signed short vy; /* 相対座標データ */
unsigned short pt; /* スプライトパターンNo. */
unsigned short rv; /* 反転コード */
} SP_WORK;
static int frame_no = 0;
static int sprite_no = 0;
static int sprite_no_max[FRAME_MAX];
static char obj_fname[256];
static char sp_fname[256];
static int sp_size;
static SP_WORK sp_work[FRAME_MAX][SPRITE_MAX];
void fxsp_init (char *f, char *sp_f, int size)
{
strcpy (obj_fname, f);
strcpy (sp_fname, sp_f);
sp_size = size;
}
short fxsp_on (void)
{
return (0);
}
/* xsp_set_st と置き換えて使うと引き数の構造体を .obj ファイルに書き出す */
short fxsp_set_st (void *sp_work0)
{
if (sprite_no < SPRITE_MAX) {
sp_work[frame_no][sprite_no].vx = ((SP_WORK *) sp_work0)->vx;
sp_work[frame_no][sprite_no].vy = ((SP_WORK *) sp_work0)->vy;
sp_work[frame_no][sprite_no].pt = ((SP_WORK *) sp_work0)->pt;
sp_work[frame_no][sprite_no].rv = ((SP_WORK *) sp_work0)->rv;
sprite_no++;
}
return (0);
}
short fxsp_out (void)
{
short s = sprite_no;
sprite_no_max[frame_no++] = sprite_no;
sprite_no = 0;
return (s);
}
static void write_pos (FILE * fp, signed short pos)
{
signed short p = pos - 144;
if (p < 0)
fprintf (fp, "-$%04hx ", -p);
else
fprintf (fp, " $%04hx ", p);
return;
}
short fxsp_off (void)
{
FILE *fp;
int i, j, pr;
if ((fp = fopen (obj_fname, "w")) == NULL) {
printf ("ファイルを書き込めません\n");
return (-1);
}
fprintf (fp, "\nPCG_FILE = %s %d * 使用する PCG データ\n"
"\n"
"XY_OFFSET = $0000 $0000 * 座標のオフセット\n"
"PT_OFFSET = $0000 * PCGパターンナンバーのオフセット\n"
"OBJ_RV = $0000 * 全体の反転コード\n"
"\n", sp_fname, sp_size);
for (i = 0; i < frame_no; i++) {
char no_str[16];
if (i == 0)
strcpy (no_str, "0");
else
strcpy (no_str, "NEXT");
fprintf (fp,
"******************************** 複合スプライトパターン %3d ****\n\n"
"No. = %s * 複合スプライトのパターンナンバー\n"
" * 左から順に、X Y PT RV (以下同様)\n"
,i, no_str);
for (pr = 0x3f; pr > 0; pr--) {
for (j = 0; j < sprite_no_max[i]; j++) {
/* ソートして書き出す(ソートしてないけど) */
if ((sp_work[i][j].rv & 0x3f) == pr) {
fprintf (fp, " ");
write_pos (fp, sp_work[i][j].vx);
write_pos (fp, sp_work[i][j].vy);
fprintf (fp, "$%04x ", sp_work[i][j].pt);
fprintf (fp, "$%04x\n", sp_work[i][j].rv);
}
}
}
fprintf (fp, "\n\n");
}
fclose (fp);
return (0);
}